共计 1736 个字符,预计需要花费 5 分钟才能阅读完成。
一. 三元表达式
1. 三元表达式适用于
- 条件成立返回一个值
- 条件不成立返回一个值
2. 判断两个数的大小
🍔使用函数来写代码
def max2(x,y):
if x > y:
return x
else:
return y
res = max2(3,4)
print(res) # 4
🍔使用三元表达式
x = 3
y = 4
res = x if x > y else y
print(res(3,4)) # 4
🍔函数加三元表达式
def max2(x,y):
return "ok" if x > y else "no"
print(max2(3,4)) # no
二. 生成式(推导式)
1. 列表生成式(推导式)
🍔使用 "for" 循环实现
l = []
for i in range(6):
l.append(i)
print(l) # [0, 1, 2, 3, 4, 5]
🍔生成式一行实现
l = [i for i in range(6)]
print(l) # [0, 1, 2, 3, 4, 5]
- 示例小练习
names = ["songhh","shawnhh","hai","xing"]
🍔将 "hh" 结尾的放入一个列表
l = [len(i) for i in names if i.endswith("hh")]
print(l) # ['songhh', 'shawnhh']
🍔将其劝变为大写
l = [i.upper() for i in names]
print(l) # ['SONGHH', 'SHAWNSHH', 'HAI', 'XING']
- 小练习 2
🍔打印文件中字符的最长长度
with open(r"a.txt","rt",enconding="utf-8")as f:
nums = [len(i) for i in f]
print(max(nums))
2. 字典生成式(推导式)
🍔
res = {i:i for i in range(3)}
print(res) # {0: 0, 1: 1, 2: 2}
🍔
info = {"name":"shawn","age":18,"sex":"man"}
res = {k:v for k,v in info.items()}
print(res) # {'name': 'shawn', 'age': 18, 'sex': 'man'}
3. 集合生成式(推导式)
sets = {i for i in range(9) if i >4}
print(sets) # {8, 5, 6, 7}
print(type(sets)) # <class 'set'>
三. 生成器表达式
1. 创建生成器的两种方式
- 调用带 yield 关键字的函数
- 使用生成器表达式
2. 生成器表达式 🆚 列表生成式
- 语法 : 语法 类似, 生成器表达式使用 (), 列表生成式使用 []
- 返回值 :
- 列表生成式返回一个 列表
- 生成器表达式返回一个 生成器对象
- 内存占用 :
- 列表生成式返回的列表元素直接 放在内存中
- 生成器表达式返回的是生成器, 一次只 产生一个值 , 更节省空间
3. 生成器表达式示例
- 小示例 1:
🍔制作一个生成器
res = (i for i in range(6))
print(res)
print(next(res)) # 0
print(next(res)) # 1
print(next(res)) # 2
print(next(res)) # 3
print(next(res)) # 4
print(next(res)) # 值取完抛出异常 StopIteration
🍔打印文件里字符最长长度 (切换 "b" 模式比较字节)
with open(r"a.txt","rt",encoding="utf-8")as f:
res = (len(i) for i in f) # 得到一个生成器
print(res) # <generator object <genexpr> at 0x000001949AD7AAC8>
print(max(res))
- 小示例 2:
🍔统计文件的字符个数 (切换 "b" 模式统计字节)
with open(r"aaa.txt","rt",encoding="tuf-8")as f:
lens = 0
for i in f:
lens += len(i)
print(lens)
🍔使用列表生成式 "[]" 配合 "sum()" 函数
res = sum([len(i) for i in f])
print(res)
🍔使用生成器表达式 "()" 配合 "sum()" 函数
res = sum((len(i) for i in f))
🔰 "sum( )" 会自动迭代取出生成器对象里面的值进行相加, so 可以不用加两层括号
res = sum(len(i) for i in f)
print(res)
正文完